#include "render.h"

void init_curses(WINDOW * PlanszaWnd)
{
    initscr();
    start_color();
    noecho();
    //kolory
    init_pair(1, COLOR_WHITE, COLOR_BLACK);
    init_pair(2, COLOR_RED, COLOR_BLACK);
    init_pair(3, COLOR_WHITE, COLOR_WHITE);
    init_pair(4, COLOR_WHITE, COLOR_GREEN);
    init_pair(5, COLOR_RED, COLOR_GREEN);
    init_pair(6, COLOR_WHITE, COLOR_YELLOW);
    init_pair(7, COLOR_RED, COLOR_YELLOW);


    PlanszaWnd = newwin(18, 26, 0, 0);
    
}

WINDOW *create_newwin(int height, int width, int starty, int startx)
{
    WINDOW *local_win;

	
	box(local_win, 0 , 0);		/* 0, 0 gives default characters
					 * for the vertical and horizontal
					 * lines			*/

	wrefresh(local_win);		/* Show that box 		*/

	return local_win;
}

void rysujPlansze(WINDOW * wndPlansza ,struct poleStruct pole[])
{
    box(wndPlansza, 0 , 0);
    
                                         int i, j, pi, pj;
                                         char c=254;
     int color;
    for(i=0;i<32;i++)
	{
	        switch (pole[i].typ)
                {
                 case Bialy: color=1; break;
                 case Czarny: color=2; break;
                 case Pusty: color=1; break;
                         default: break;
                }
                    for(pi=0;pi<2;pi++)
                    for(pj=0;pj<3;pj++)
                    if((i/4)%2==0)
                    {
                        wattron(wndPlansza, COLOR_PAIR(3));
                        mvwprintw(wndPlansza,1+(i/4)*2+pi,4+6*(i%4)+pj,"f");
                        wattroff(wndPlansza, COLOR_PAIR(3));
                        if(pole[i].typ!=Pusty)
                        {
                            wattron(wndPlansza, COLOR_PAIR(color));
                            mvwprintw(wndPlansza,1+(i/4)*2+pi,1+6*(i%4)+pj,"@");
                            wattroff(wndPlansza, COLOR_PAIR(color));
                        }else
                            {
                            wattron(wndPlansza, COLOR_PAIR(1));
                            mvwprintw(wndPlansza,1+(i/4)*2+pi,1+6*(i%4)+pj," ");
                            wattroff(wndPlansza, COLOR_PAIR(1));
                        }
                    }
                    else
                    {
                        wattron(wndPlansza, COLOR_PAIR(3));
                        mvwprintw(wndPlansza,1+(i/4)*2+pi,1+6*(i%4)+pj,"f");
                        wattroff(wndPlansza, COLOR_PAIR(3));
                        if(pole[i].typ!=Pusty)
                        {
                            wattron(wndPlansza, COLOR_PAIR(color));
                            mvwprintw(wndPlansza,1+(i/4)*2+pi,4+6*(i%4)+pj,"@");
                            wattroff(wndPlansza, COLOR_PAIR(color));
                        }else
                            {
                            wattron(wndPlansza, COLOR_PAIR(1));
                            mvwprintw(wndPlansza,1+(i/4)*2+pi,4+6*(i%4)+pj," ");
                            wattroff(wndPlansza, COLOR_PAIR(1));
                        }
                    }
                    wrefresh(wndPlansza);
	                

    }
            
          //delwin(wndPlansza);
}

void rysujSekwencje(WINDOW * wndPlansza,struct list * sekwencja, struct poleStruct pole[])
{
    struct list * cur = sekwencja;
    int color, wybPole;
    while(cur)
    {
        wybPole=cur->key;
        switch (pole[wybPole].typ)
        {
            case Bialy: color=6; break;
            case Czarny: color=7; break;
            case Pusty: color=6; break;
            default: break;
        }
        wattron(wndPlansza, COLOR_PAIR(color));
        int i, j;
        for(i=0;i<WYS;i++)
            for(j=0;j<SZER;j++)
                if((wybPole/4)%2==0)
                    mvwprintw(wndPlansza,1+(wybPole/4)*WYS+i,1+2*SZER*(wybPole%4)+j,"@");
                else
                    mvwprintw(wndPlansza,1+(wybPole/4)*WYS+i,1+SZER+2*SZER*(wybPole%4)+j,"@");
        wattroff(wndPlansza, COLOR_PAIR(color));

        cur=cur->next;
    }
    wrefresh(wndPlansza);

}
void rysujZaznaczenie(WINDOW * wndPlansza,int wybPole, struct poleStruct pole[])
{
    int color;
    switch (pole[wybPole].typ)
    {
        case Bialy: color=4; break;
        case Czarny: color=5; break;
        case Pusty: color=4; break;
        default: break;
    }
    wattron(wndPlansza, COLOR_PAIR(color));
    int i, j;
    for(i=0;i<WYS;i++)
        for(j=0;j<SZER;j++)
            if((wybPole/4)%2==0)
                mvwprintw(wndPlansza,1+(wybPole/4)*WYS+i,1+2*SZER*(wybPole%4)+j,"@");
            else
                mvwprintw(wndPlansza,1+(wybPole/4)*WYS+i,1+SZER+2*SZER*(wybPole%4)+j,"@");
    wattroff(wndPlansza, COLOR_PAIR(color));

    wrefresh(wndPlansza);


}

struct list * wybierzSekwencje(WINDOW * wndPlansza, struct poleStruct pole[])
{
       /* wattron(wndPlansza, COLOR_PAIR(4));

    mvwprintw(wndPlansza,3,3,"sfdsfd");
    wrefresh(wndPlansza );
        wattroff(wndPlansza, COLOR_PAIR(4));
*/
        int wybranePole = 0;

    char ch;
    int koniec=1;
    struct list * sekwencja=0;
    rysujZaznaczenie(wndPlansza, wybranePole,pole);
    while(koniec)
    {
        //ch = getchar();
        switch (ch=getchar())
        {
            case 'w':  if(wybranePole/4>0) wybranePole=wybranePole-4; break;
            case 's': if(wybranePole/4<7) wybranePole=wybranePole+4; break;
            case 'a': if(wybranePole%4>0) wybranePole=wybranePole-1; break;
            case 'd': if(wybranePole%4<3) wybranePole=wybranePole+1; break;
            case /*KEY_ENTER*/'h': /*if(pole[wybranePole].typ=Pusty)*/ sekwencja = listDodajNaKoniec(sekwencja,wybranePole); break;
        //    case KEY_BACKSPACE: listUsunOstatni(); break;
            case 32: /*spacja*/koniec=0; break;
            default: break;
        }
        

        rysujPlansze(wndPlansza, pole);
        
        if(sekwencja)
        rysujSekwencje(wndPlansza, sekwencja, pole);
        rysujZaznaczenie(wndPlansza, wybranePole,pole);


    }
    return sekwencja;
}
